// Copyright Epic Games, Inc. All Rights Reserved.

#pragma once // 防止头文件被重复包含

#include "Messages/GameplayMessageProcessor.h" // 包含游戏消息处理器基类

#include "AssistProcessor.generated.h" // 包含由Unreal Header Tool生成的代码

class APlayerState; // 前向声明玩家状态类
class UObject; // 前向声明UObject基类
struct FGameplayTag; // 前向声明游戏标签结构体
struct FLyraVerbMessage; // 前向声明Lyra动词消息结构体
template <typename T> struct TObjectPtr; // 前向声明模板类TObjectPtr

// 追踪其他玩家对某个玩家造成的伤害
USTRUCT() // 标记为Unreal反射结构体
struct FPlayerAssistDamageTracking // 玩家助攻伤害追踪结构体
{
	GENERATED_BODY() // 生成反射函数体

	// 伤害者到造成的伤害值的映射
	UPROPERTY(Transient) // 标记为临时属性，不保存到磁盘
	TMap<TObjectPtr<APlayerState>, float> AccumulatedDamageByPlayer; // 累积伤害映射
};

// 追踪助攻（对另一个玩家造成伤害但未完成击杀）
UCLASS() // 标记为可实例化的类
class UAssistProcessor : public UGameplayMessageProcessor // 继承自游戏消息处理器
{
	GENERATED_BODY() // 生成反射函数体

public:
	virtual void StartListening() override; // 开始监听消息的虚函数

private:
	void OnDamageMessage(FGameplayTag Channel, const FLyraVerbMessage& Payload); // 处理伤害消息的私有函数
	void OnEliminationMessage(FGameplayTag Channel, const FLyraVerbMessage& Payload); // 处理击杀消息的私有函数

private:
	// 玩家到对其造成的伤害记录的映射
	UPROPERTY(Transient) // 标记为临时属性，不保存到磁盘
	TMap<TObjectPtr<APlayerState>, FPlayerAssistDamageTracking> DamageHistory; // 伤害历史记录映射
};